草庐IT

c - WaitForMultipleObjects 堆栈

全部标签

c++ - C++03 标准容器的堆栈分配器

对于一个软件,我必须避免在堆中使用任何内存,并且只依赖堆栈分配的内存。然后,这使我无法使用我真正想使用的任何C++标准容器,例如vector、映射、字符串(好吧,basic_string)来简化开发和数据操作。我发现了(许多)堆栈分配器的实现,例如thisone它本身引用了另外两个,或者thisone来自Chrome。其中许多并不完全符合标准,或者依赖于C++11(遗憾的是,我目前还在使用C++03)。您对C++03现有的良好堆栈分配器有任何反馈,或者我应该采用上述之一吗?谢谢! 最佳答案 HowardHinnant的short_a

c++ - 跟踪(堆栈分配的)对象

在一个相当大的应用程序中,我想跟踪有关某个类对象的一些统计信息。为了不降低性能,我希望在拉取配置中更新统计信息。因此,我需要在某个位置引用每个事件对象。是否有一种惯用的方法可以:创建、搜索、迭代此类引用自动管理它(即在销毁时删除引用)我在这里考虑一组智能指针,但内存管理会有些颠倒:当智能指针被销毁时,我不想销毁对象,而是希望智能指针被删除,当对象被销毁。理想情况下,我不想重新发明轮子。我可以忍受删除指针的延迟,我只需要一种快速使它们失效的方法。编辑:因为paddy自找的:pull-based收集的原因是获取信息的成本可能相对较高。推送显然是一种干净的解决方案,但被认为过于昂贵。

c++ - 识别地址是否属于堆或堆栈或寄存器

我有一个指向C/C++变量的指针。是否可以准确判断出该变量属于内存的哪一段?如果是,如何?注意:我只有这个变量的地址,如果变量是本地/全局等,则没有更多信息。 最佳答案 查明您的体系结构是否有指向您的堆或堆栈区域的指针。通常有一些stackpointers或者framepointers..然后将您的实际地址与这些地址进行比较,并确定它们属于何处。 关于c++-识别地址是否属于堆或堆栈或寄存器,我们在StackOverflow上找到一个类似的问题: https:

c++ - 如何在顶级过滤器中获取 Win32 崩溃的字符串描述(我正在寻找堆栈顶部指令的地址)

如果我使用类似onedescribedhere的类/方法如何在堆栈顶部获取调用的描述/地址?基本上我想要一些可以在调用我们的错误跟踪系统时使用的值。我想根据导致异常的指令的地址“唯一”标识。(通常是mydll.dll的形式!1234ABDC())编辑:一些背景信息:我正在创建一个小型转储以通过电子邮件发送到缺陷跟踪系统(fogbugz)。为了减少重复,我试图为崩溃想出一个合理的“签名”。我知道有一个用于FB的xmlPI,但它需要用户登录,我们还不确定我们是否能够负担得起让人们嗅探我们的流量并获取用户信息。电子邮件现在也更容易实现。稍后我们将使用XMLAPI提交小型转储。

c++ - 我可以获得未处理(目标)C++ 异常的堆栈跟踪吗?

我正在开发一个iOS应用程序,该应用程序最近发展了一个大型C++基础。C++不是我的强项,我对异常感到沮丧。我正在寻找的是一种获取(未处理的)异常抛出站点的堆栈跟踪的方法。我会说“未处理”限定符是可选的;我会接受在任何异常抛出时中断作为最后的手段,尽管未处理的异常是理想的。我目前得到的是无用的。假设我在调用堆栈的上层没有任何合适的异常处理程序,我会做类似的事情std::vectormy_vector;my_vector.at(40)=2;//Throwsstd::out_of_range应用程序将在main()中中断,我将收到一条日志消息,内容为“终止调用引发异常”。没有帮助。将通用的

c++ - 使用错误的 "this"指针调用构造函数。这是堆栈损坏吗?

编辑:我在评论者的帮助下弄明白了。回答我标题中提出的问题:不,这不是堆栈损坏,它的gdb报告了错误的值。该程序实际上按预期运行并且具有正确的this指针。促使我发布此问题的实际错误行为可能与我在此处描述的问题完全无关。首先是一个警告。我相信这是一个内存损坏问题,除了“彻底检查你的代码”之外,我通常不会期望得到答案,但我已经看到这种行为反复出现,希望你们中的一些人对这个问题有洞察力以及我是如何做的可以找到它的来源。我目前正在实现区间静态分析,它跟踪C程序中变量的可能范围。我的基区间类的复制构造函数如下所示:itvt::itvt(constitvt&i):_i(i.type==INTBV?

C++ 参数堆与堆栈

假设我创建了两个vector,一个在堆上,一个在栈上:Vectorvector1;Vector*vector2=newVector;然后我通过vector1分成两个函数,比如说,foo1(Vector)和foo2(Vector&).我也通过vector2进入foo3(Vector*).由于我是C++的新手,我对这里的行为差异感到很困惑。我对foo1这样说对吗?,整个vector1被复制,对于foo2,仅引用vector1被传递到函数中?但不是vector1,在堆栈上声明,除了创建它的范围外,应该在其他任何地方(即从内部foo2)都无法访问?另外,修改vector1的内容里面foo1,f

c++ - 当 bWaitAll 为 TRUE 时,WaitForMultipleObjects 返回值

由于有些人对文档有不同的解释,我试图一劳永逸地澄清WaitForMultipleObjects的返回值。什么时候bWaitAll=TRUE。所有句柄均已发出信号基于文档:返回值WAIT_OBJECT_0到(WAIT_OBJECT_0+nCount–1)如果bWaitAll为TRUE,则返回值表示所有指定对象的状态都已发出信号。问题假设我已经将5个句柄传递给这个函数并且所有都被发出信号,返回值是WAIT_OBJECT_0吗?注意事项我正在尝试以编程方式验证WaitForMultipleObjects是否成功。DWORDdwWaitForMultipleObjectsRes=WaitFor

c++ - 堆栈分配的 RAII 对象与 DI 原则

在C++中,我经常使用RAII风格的对象来使代码更可靠,并将它们分配到堆栈上以提高代码的性能(并避免bad_alloc)。但是在堆栈上创建具体类的对象违反了依赖倒置(DI)原则并阻止模拟此对象。考虑以下代码:structIInputStream{virtualvectorread(size_tn)=0;};classConnection:publicIInputStream{public:Connection(stringaddress);virtualvectorread(size_tn)override;};structIBar{virtualvoidprocess(IInputS

c++ - C/C++ 中的并发编程、堆栈和堆

好吧,如果这感觉像是重复了旧问题,我很抱歉,我已经在StackOverflow,tanenbaum的现代操作系统书上浏览了几个问题,并且仍然需要清除我对此的疑虑。首先,如果我应该更详细地阅读任何书籍/资源以更好地理解这种结构,我将不胜感激。我不明白这些是操作系统书籍、编程语言或架构书籍中通常解释的概念。在我提出问题之前,我将根据有关堆栈/堆的阅读列出我的发现堆仅包含所有实例变量、动态分配(新/malloc)和全局变量不再使用数据结构堆,使用更复杂的结构通过内存位置访问,单个进程负责在其上分配的内存碎片整理和内存分配由操作系统完成(如果是或否,请回答我关于谁管理堆、操作系统或运行时环境的